package com.achao.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 标记可以[实例化]的注解: Service
 * @Author: achao
 * @DateTime: 2022/7/29 13:40
 * @Description: TODO
 */

/**
 * @Target(): 注解放的位置,常用的有以下几个:
 * ElementType.TYPE: 作用于Class,interface或enum
 * ElementType.METHOD 作用于Method(方法)
 * ElementType.PARAMETER 作用于形参上
 * ElementType.CONSTRUCTOR 作用于构造函数
 * ElementType.PACKAGE 作用于包
 */

/**
 *  @Retention: 表示需要在什么级别保存该注释信息，用于描述注解的生命周期
 * （即：被描述的注解在什么范围内有效）
 *  RetentionPolicy.RUNTIME: 运行时保留
 *  RetentionPolicy.SOURCE: 编译成功后丢弃
 *  RetentionPolicy.CLASS: 注释将由编译器记录在类文件中，但不需要在运行时由 VM 保留。
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Service {
    String value() default "";
}
